package com.adee.java;

import lombok.extern.slf4j.Slf4j;

/**
 * Object.hashCode()方法底层代码：
 * public static int hashCode(byte[] value) {
 *     int h = 0;
 *     for (byte v : value) {
 *         h = 31 * h + (v & 0xff);
 *     }
 *     return h;
 * }
 * 为什么选31，而不是2、17、19等？
 * 为了提高哈希结果的离散性，需要选择大素数。
 * 31*h 等价于 h<<5-h，cpu执行移位运算比乘法运算效率高。
 */
@Slf4j
public class Test031_hashCode {
    public static void main(String[] args) {
        
        Object obj = new Object();
        obj.hashCode();
        obj.equals(null); // Object.equals直接用==判断，因此自定义类需要重写equals方法（如果用到了equals方法）
        String s = "hello";
        s.equals(null);
    }
}
